home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 42 / Amiga Format AFCD42 (Issue 126, Aug 1999).iso / -serious- / hardware / blizkick / blizkick.asm < prev    next >
Assembly Source File  |  1999-05-17  |  63KB  |  2,982 lines

  1. ; FILE: Source:BlizKick.ASM          REV: 468 --- BlizKick
  2. ; History
  3. ;  1      Running OK!
  4. ;  15     Now BlizKick should work with all Blizzard turbos.
  5. ;  19     Now BlizKick should even support KS 1.0... (?)
  6. ;  25     Added LOCALFAST feature.
  7. ;  31     Added QUICKBOOT feature.
  8. ;  33     Added better Printf.
  9. ;  48     Added Better ROM identification code (checksum).
  10. ;  65     Added "real" cache clear routine.
  11. ;  69     Fixed _seek bug.
  12. ;  71     Fixed KS 1.3 SPEEDROM bug.
  13. ;  81     Replaced "execinit" patch with resident tag.
  14. ;  107    Fix for Blizzard 1260! 1230-IV too!!
  15. ;  111    Added original Kickstart restoration.
  16. ;  114    Implemented KS1.x KS restoration.
  17. ;  115    Improved error messages.
  18. ;  116    Improved MAPROM test and CacheClear routine.
  19. ;  125    Added HOGWAITBLIT feature.
  20. ;  129    Added SetPatch (680x0.library) check.
  21. ;  175    Added MODULE feature.
  22. ;  186    Added EXTRESBUF feature.
  23. ;  210    Added External patches and BKMF_ExtResBuf flag, fixed 1.x ROMTag support.
  24. ;  215    Fixed LOCALFAST feature not to force MEMF_LOCAL or MEMF_KICK!
  25. ;  220    Fixed KS 1.x ROMTag support.
  26. ;  225    Added special handling for 1230-IV and 1260. Fixed FORCE.
  27. ;  240    Removed need to be run before SetPatch on 1260 systems.
  28. ;  248    Can be used with Enforcer, CPU FASTROM, VMM etc.
  29. ;  257    Improved 040/060 cache flushing code. BlizKick release 1.6.
  30. ;  266    Fixed bug in 040/060 MMU test code.
  31. ;  276    Added XPK support.
  32. ;  277    Modified to work better with PowerPC... :)
  33. ;  279    Added better (Old)OpenLibrary code. Removed FindName() things.
  34. ;  289    Fixed XPK support.
  35. ;  293    Now will set memory node name if null.
  36. ;  300    Fixed EXTRESBUF.
  37. ;  302    Fixed negative return code bug.
  38. ;  307    Added ROM address validity test.
  39. ;  311    Fixed BLIZZARD 2060 code.
  40. ;  313    Fixed one terrible bug from B2060 code.
  41. ;  328    Fixing EXTRESBUF...
  42. ;  332    Finished! Now it should work with 1260, 2040 and 2060.
  43. ;  338    DOES work on 1260. Fixed one minor bug. SoftSCSI module doesn't work.
  44. ;  340    Added memheader move code to LOCALFAST. -> Speed AllocMem()
  45. ;  343    Fixed reset code!
  46. ;  344    Allowed BlizKick to kick same kickfile and rom chip version.
  47. ;  348    Fixed .testblizppcrunnommu. Added pseudofile (*) feature.
  48. ;  353    Added LastPatches (fix for MEMF_REVERSE svstack, etc.)
  49. ;  361    Fixed svstack trash, disabled SVSTACKTRASH.
  50. ;  377    Added QUIET switch, fixed LastPatches, KS 33.180 works now!
  51. ;  388    Got KS 33.180 finally work 100%.
  52. ;  389    Added handling for BKMODPATH env variable.
  53. ;  399    Improved HOGWAITBLIT.
  54. ;  400    Found out that 2040 and 2060 boards are almost identical.
  55. ;  403    Fixed reset code to *disable* caches.
  56. ;  404    1.11ß1: Trying to get EXTRESBUF into fastmem.
  57. ;  412    Did it. Seems to work 100%.
  58. ;  415    Fixed MAPROM test. Now should detect if MAPROM not set.
  59. ;  416    Disabled SUPERVISOR_NOREVERSE from LastPatches.
  60. ;  421    Added support for (A4000?) CPU Cards.
  61. ;  425    Now KS 1.x are only patched if they're original versions. This should
  62. ;         prevent problems with some patches 1.x ROM images.
  63. ;  426    Fixed bug in ROM image validation test.
  64. ;  427    9th Dec 1997: ARGH! Wrote nice CPUCard support but forgot to enable
  65. ;         it!!! ;-)
  66. ;  429    Added support for Cyberstorm PPC and MKIII. Now should work at least
  67. ;         with CBM CPU Cards, Cyberstorm MKI, MKIII and PPC.
  68. ;  439    Separated A1200 and other model's check routines. Hopefully fixed CS
  69. ;         MKIII/PPC support. Added CS MKII support. Now CPUCARD is only meant to
  70. ;         be used with CS MKI & compatible.
  71. ;  442    Fixed few typos etc.
  72. ;  443    Fixed stupid BUG from CS support... THANKS DUKEN!! =)
  73. ;  444    Had mixed 20x0 and CS MK II product IDs... doh! Thanks shido at #amiga!
  74. ;  445    Fixed some Lock bugs.
  75. ;  446    13th May 1998 Made the source public in hope someone would continue the
  76. ;         development.
  77. ;  450    6th July 1998 Added Blizzard PPC support.
  78. ;  458    8th July 1998 Fixed Blizzard PPC and CS MKII support (I hope).
  79. ;  459    17th July 1998 Fixed stupid bug from CS MKII support.
  80. ;  461    4th October 1998 Finally fixed the blizz ppc bug. hehe.
  81. ;  462    6th October 1998 Fixed support for old KS.
  82. ;  463    9th October 1998 Fixed MK2 bug. Ta ChaoZer.
  83. ;  464    13th October 1998 Another MK2 fix <sigh>. Ta ChaoZer.
  84. ;  467    3rd November 1998 Disabled rom checksum disable in SPEEDROM.
  85. ;  468    24th January 1999 Fixed stupid blizzppc (and probably CSPPC too)
  86. ;         bug, blizzppc/csppc kernel overwrote EXTRES buffer. Now allocates
  87. ;         1mb extra memory.
  88. ;
  89.  
  90. ;
  91. ; I seriously doubt if this source code is useful for anything else.
  92. ; Hairy code everywhere, this one is really a bitch to maintain...
  93. ;
  94.  
  95. ; TODO
  96. ; o Support for 2040 and 2060 scsi rom.
  97. ; o ROM checksum (restore orig rom if bad)
  98.  
  99. ; (possibly)
  100. ; o IDEFix97 module (rs:LoadIDE.rs)
  101. ; o OxyPatcher module
  102. ; o ENVARC: ENV: etc.
  103. ; o args from file
  104. ; o module memory requirements inside the module itself ('$LEN: 280' ?)
  105.  
  106. ; o Problem with MoveVBR module on 1240??
  107. ; o Crash when running BlizKick after SetPatch on 2040??
  108. ; ? FastExec (LOCALFAST) didn't work (on 1260) if started after SetPatch ??
  109. ;
  110. ; o Add possibility to plant any single hunk device or library.
  111. ; ^ Support for scsi.device module (GetSCSI)
  112. ; o Fix QUICKBOOT for 1230-IV & 1260
  113. ; ^ Fix 1230-IV scsi-kit problems ? PROBABLY FIXED
  114.  
  115. USE_STD_INCLUDES    SET    1
  116.     IFNE    USE_STD_INCLUDES
  117.     MACHINE    MC68040
  118.     include    "exec/types.i"
  119.     include    "exec/nodes.i"
  120.     include    "exec/libraries.i"
  121.     include    "exec/memory.i"
  122.     include    "exec/execbase.i"
  123.     include    "exec/resident.i"
  124.     include    "exec/alerts.i"
  125.     include    "dos/dos.i"
  126.     include    "exec/exec_lib.i"
  127.     include    "dos/dos_lib.i"
  128.     include    "graphics/gfxbase.i"
  129.     include    "graphics/graphics_lib.i"
  130. call    MACRO
  131.     jsr    (_LVO\1,a6)
  132.     ENDM
  133.     ELSE
  134.     include    "Devpac:Gen.gs"
  135.     ENDC
  136.     include    "dos/dosextens.i"
  137.     include    "libraries/configvars.i"
  138.     include    "libraries/expansion_lib.i"
  139.     include    "hardware/dmabits.i"
  140.     include    "hardware/custom.i"
  141.  
  142.     include    "libraries/xpk.i"    ; from xpk_dev
  143.  
  144.     include    "blizkickmodule.i"
  145.  
  146. ARG_KICKFILE    EQU    0
  147. ARG_MODULE    EQU    4
  148. ARG_EXTRESBUF    EQU    8
  149. ARG_FORCE    EQU    12
  150. ARG_LOCALFAST    EQU    16
  151. ARG_QUICKBOOT    EQU    20
  152. ARG_SPEEDROM    EQU    24
  153. ARG_HOGWAITBLIT    EQU    28
  154. ARG_CPUCARD    EQU    32
  155. ARG_QUIET    EQU    36
  156.  
  157. BUFSIZEL    EQU    $10000
  158. BLIZPROD    EQU    $2140
  159. ROMSUMOFFS    EQU    -$18
  160. ROMSIZEOFFS    EQU    -$14
  161. IDOFFS    EQU    -$10
  162. BLIZKICK_ID    EQU    'BlzK'
  163.  
  164. KEEP_CHECKSUM    EQU    1        ;don't disable rom checksum
  165.  
  166. ;SVSTACKTRASH    EQU    8*1024        ;16384
  167.  
  168. CACHEFLUSH040    MACRO
  169.     dc.w    $4E71        ; nop
  170.     dc.w    $F478        ; CPUSHA BC    flush the data into memory
  171.     dc.w    $4E71        ; nop
  172.     ENDM
  173.  
  174. FULLFLUSH040    MACRO
  175.     dc.w    $4E71        ; nop
  176.     dc.w    $F478        ; CPUSHA BC    flush the data into memory
  177.     dc.w    $4E71        ; nop
  178.     dc.w    $F4D8        ; INVA    BC    invalidate the data and inst caches
  179.     dc.w    $4E71        ; nop
  180.     dc.w    $F518        ; PFLUSHA    flush the address translation cache
  181.     dc.w    $4E71        ; nop
  182.     ENDM
  183.  
  184. ;;    dc.w    $F4F8        ; CPUSHA DC    flush the data cache into memory
  185.  
  186.  
  187. MOVQ    MACRO    *value
  188.     IFGT    (127-(\1))
  189.     moveq    #(\1),\2
  190.     MEXIT
  191.     ENDC
  192.     IFEQ    ((\1)&%1)
  193.     IFGT    (256-(\1))
  194.     moveq    #(\1)>>1,\2
  195.     add.l    \2,\2
  196.     MEXIT
  197.     ENDC
  198.     ENDC
  199.     IFGT    (127-((\1)^$000000FF))
  200.     moveq    #(\1)^$000000FF,\2
  201.     not.b    \2
  202.     MEXIT
  203.     ENDC
  204.     move.l    #(\1),\2
  205.     ENDM
  206.  
  207.  
  208.     SECTION    CODE_C,CODE_C
  209.  
  210. Main    move.l    a0,a2
  211.     move.l    d0,d2
  212.     moveq    #RETURN_FAIL,d7
  213.     move.l    (4).w,a6
  214.     move.l    a6,_ExecBase
  215.     move.w    (AttnFlags,a6),_AttnFlags
  216.  
  217.     lea    (DosName,pc),a1
  218.     moveq    #0,d0
  219.     bsr    OpenLib
  220.     move.l    d0,d6
  221.     beq    .exit
  222.     move.l    d0,a6
  223.  
  224.     moveq    #0,d4            Set default!!
  225.  
  226.     cmp.w    #37,(LIB_VERSION,a6)
  227.     shs    d5
  228.  
  229.     bsr    getmmu
  230.     move.b    d0,_mmuflag
  231.  
  232.     lea    _Array,a3
  233.     tst.b    d5
  234.     bne.b    .ks20
  235.     clr.l    -1(a2,d2.l)
  236.     subq.l    #1,d2
  237.     beq.b    .do            RESTORE!
  238.     move.l    a2,(a3)
  239.     lea    (_13Help,pc),a0
  240.     cmp.b    #'?',(a2)
  241.     bne.b    .do
  242.     subq.l    #1,d2
  243.     beq.b    .printmsgexit
  244.     bra.b    .do
  245. .ks20    lea    (_Template,pc),a0
  246.     move.l    a0,d1
  247.     move.l    a3,d2
  248.     moveq    #0,d3
  249.     call    ReadArgs
  250.     move.l    d0,d4
  251.     beq.b    .badargs
  252.  
  253. .do
  254.     move.l    (ARG_QUIET,a3),_Quiet
  255.  
  256.     tst.l    (ARG_CPUCARD,a3)
  257.     beq.b    .no_cpucard
  258.     bsr    CheckCPUCard
  259.     sne    _CPUCard
  260.     bne.b    .has_cpucard
  261.     lea    (NoCPUCard,pc),a0
  262.     bra.b    .printmsgexit
  263. .no_cpucard
  264.     bsr    TestBliz
  265.     lea    (RequiresBliz,pc),a0
  266.     move.l    d0,_BlizROM
  267.     beq.b    .printmsgexit
  268. .has_cpucard
  269.  
  270.     movem.l    d4-d6/a6,-(sp)
  271.     moveq    #RETURN_ERROR,d7
  272.     lea    (Messu,pc),a0
  273.     bsr    _PrintHeaderf
  274.     bsr    _H